//螺旋矩阵二  力扣59
class Solution {
public:
	vector<vector<int>> generateMatrix(int n) {
		vector<vector<int>> matrix(n,vector<int>(n));
		int startindex = 0; //矩阵每一圈的行起始位置
		int startcolumn = 0;//矩阵每一圈的列起始位置
		int j = 0;
		int i = 0;
		int num = 1; //当前放置的数字
		int loop = n / 2; //矩阵圈数（不包括最中间的点）
		int offset = 1; //偏移量，用来控制每一圈结束的条件，每过一圈收缩1
		while(loop--)
		{
			// 各行的填充都遵循左闭右开
			//上行
			for(j = startcolumn; j < n - offset; j++)
				matrix[startindex][j] = num++;
			//右行
			for(i = startindex; i < n - offset; i++)
				matrix[i][j] = num++;
			//下行
			for( ; j > startcolumn; j--)
				matrix[i][j] = num++;
			//左行
			for( ; i > startindex; i--)
				matrix[i][j] = num++;
			
			startcolumn++;
			startindex++;
			offset++;
		}
		//若n为奇数，则最中心的点还需填充
		if(n % 2 == 1) matrix[startcolumn][startindex] = num;
		return matrix;
	}
};
